'''
内容：
    定义一系列算法，把他们一个个封装起来，并且使它们可互相替换。
    本模式使得算法可独立于使用它的客户而变化。

优点：
    1）定义了一系列可重用的算法和行为
    2）消除了一些条件语句

缺点：
    1）客户必须了解不同的策略
'''

from abc import ABCMeta, abstractmethod
from dataclasses import dataclass


class Strategy(metaclass=ABCMeta):
    @abstractmethod
    def execute(self,data):
        pass

class FastStratege(Strategy):
    def execute(self, data):
        print("用较快的策略处理%s" % data)
    
class  SlowStrategy(Strategy):
    def execute(self, data):
        print("用较慢的策略处理%s" % data)


class Context:
    def __init__(self,strategy,data) -> None:
        self.data = data
        self.strategy = strategy

    def set_strategy(self,strategy):
        self.strategy = strategy
    
    def do_strategy(self):
        self.strategy.execute(self.data)




if __name__ == "__main__":
    data = '.....'
    Context(SlowStrategy(),data).do_strategy()
